/*
 * libArchivoConfiguracion.h
 *
 *  Created on: 27/01/2012
 *      Author: utnso
 */

#ifndef LIBARCHIVOCONFIGURACION_H_
#define LIBARCHIVOCONFIGURACION_H_

//INCLUDES

#include <stdint.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <time.h>
#include "libArchivoLog.h"

//CONSTANTES

#define PATH_ARCHIVO_CONFIGURACION "/home/utnso/Escritorio/FSClient.config"

#define MAX_LINEA_ARCHIVO_CONFIGURACION 200

//TIPOS

typedef struct archConfig_t{
	char* IP;
	int32_t puerto;
	uint8_t cantConexiones;
	uint8_t nivelLog;
} __attribute__((packed)) archConfig_t;

typedef struct IPAux_t{
	char* id;
	char* valor;
} __attribute__((packed)) IPAux_t;

typedef struct puertoAux_t{
	char* id;
	int32_t valor;
} __attribute__((packed)) puertoAux_t;

typedef struct cantConexionesAux_t{
	char* id;
	int16_t valor;
}__attribute__((packed)) cantConexionesAux_t;

typedef struct nivelLogAux_t{
	char* id;
	int16_t valor;
}__attribute__((packed)) nivelLogAux_t;

typedef struct archConfigAux_t{
	IPAux_t IP;
	puertoAux_t puerto;
	cantConexionesAux_t cantConexiones;
	nivelLogAux_t nivelLog;
} __attribute__((packed)) archConfigAux_t;

//FUNCIONES

uint8_t leerArchivoConfiguracion(archConfig_t*);
/*Esta funcion lee un archivo de texto con datos de configuracion.
 * ------------------------------------------------------------
 * Recibe una estructura con los datos que se debenleer del
 * archivo de configuracion.
 * ------------------------------------------------------------
 * Devuelve:
 *      0 si el archivo estaba completo.
 *      1 si el archivo estaba incompleto.
 *      2 si el formato del archivo es incorrecto.
 *      3 si el archivo no se encontro.
 *      4 realmente no puede devolver este valor.
 */

uint8_t leerLinea(FILE*, archConfigAux_t*);
/*Esta funcion lee una linea de un archivo de texto.
 * ------------------------------------------------------------
 * Recibe un puntero al archivo y una estructura auxiliar
 * para guardar datos encontrados.
 * ------------------------------------------------------------
 * Devuelve:
 *      0 si la linea termina con un salto de linea.
 *      1 si se encuetra el caracter de fin de archivo.
 *      2 si el formato de la linea es incorrecto.
 */

uint8_t parsearLinea(char*, archConfigAux_t*);
/*Esta funcion se encarga de guardar los datos encontrados en
 * una linea del archivo de configuracion en su correspondiente
 * variable de la estructura.
 * ------------------------------------------------------------
 * Recibe un buffer con una linea del archivo de texto leida y
 * una estructura auxiliar para guardar datos encontrados.
 * ------------------------------------------------------------
 * Devuelve:
 *      0 si se encontro un dato esperado.
 *      1 si el dato leido no era esperado.
 *      2 si el formato de la linea es incorrecto.
 */

void eliminarEspaciosDeCadena(char**);
/*Este proceso elimina todos los espacios de una cadena.
 * ------------------------------------------------------------
 * Recibe un buffer con la cadena a tratar.
 */

uint8_t separarIdDeValor(char*, char**, char**);
/*Esta funcion separa una cadena en dos, cortando donde
 * encuentre el caracter ':'.
 * ------------------------------------------------------------
 * Recibe la cadena a tratar, un puntero donde guardar la
 * primera parte de la cadena y un puntero donde guardar la
 * segunda parte de la cadena.
 * ------------------------------------------------------------
 * Devuelve:
 *      0 si se pudo separar la cadena.
 *      1 si no se encontro el caracter de separacion.
 */

uint8_t archivoDeConfiguracionNoCompleto(archConfigAux_t);
/*Esta funcion comprueba si luego de terminar de leer el archivo
 * de configuracion se han obtenido todos los valores esperados.
 * ------------------------------------------------------------
 * Recibe una estructura auxiliar donde se guardaron los datos
 * leidos.
 * ------------------------------------------------------------
 * Devuelve:
 *      0 si se leyeron todos los datos esperados.
 *      1 si no se leyeron todos los datos esperados.
 */

#endif /* LIBARCHIVOCONFIGURACION_H_ */
